package com.bsi.core.utils;

import org.apache.commons.lang.StringUtils;

import java.math.BigDecimal;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.util.UUID;

public class MathUtils {
	
	

	public static String getRound(double num,int scale){

		String format = "###,##0.";

		for (int i = 0; i < scale;i++) {
			format += "0";
		}

		DecimalFormat df = new DecimalFormat(format);
		return df.format(num);
	}
	

	/**
	 * 四舍五入,没有小数点的原样输出,有带.00也去掉
	 * 重载方法
	 */
	public static String getRound(String numStr,int scale,boolean flag){

		if(numStr == null)
			return "0";
		
		if(flag){
			if(!numStr.contains(".") || numStr.indexOf(".") == numStr.length() - 1){
				return numStr.replace(".","");
			}else if(numStr.indexOf(".") < numStr.length() - 1){
				String tmp = numStr.substring(numStr.indexOf(".") + 1);
				if(Integer.parseInt(tmp) == 0){
					return numStr.replace("." + tmp,"");
				}
			}							
		}

		double num = Double.parseDouble(numStr);
		String format = "###,##0.";

		for (int i = 0; i < scale;i++) {
			format += "0";
		}

		DecimalFormat df = new DecimalFormat(format);
		return df.format(num);
	}

	//整数的千分位处理
	public static String getRoundcg(double num){

		String format = "###,##0";

		DecimalFormat df = new DecimalFormat(format);
		return df.format(num);
	}
	
	public static String getRoundnoformat(double num,int scale){

		String format = "##0.";

		for (int i = 0; i < scale;i++) {
			format += "0";
		}

		DecimalFormat df = new DecimalFormat(format);
		return df.format(num);
	}
	
	//加
	public static String doubleAdd(String str1,String str2)
	{
		if(StringUtils.isBlank(str1)){
			str1 = "0";
		}
		
		if(StringUtils.isBlank(str2)){
			str2 = "0";
		}
		
		BigDecimal a = new BigDecimal(str1);
		BigDecimal b = new BigDecimal(str2);
		
		return a.add(b).stripTrailingZeros().toPlainString();
	}
	
	//减
	public static String doubletract(String str1,String str2)
	{
		if(StringUtils.isBlank(str1)){
			str1 = "0";
		}
		
		if(StringUtils.isBlank(str2)){
			str2 = "0";
		}
		
		BigDecimal a = new BigDecimal(str1);
		BigDecimal b = new BigDecimal(str2);
		
		return String.valueOf(a.subtract(b));
	}
	
	//乘
	public static String doublemultiply(String str1,String str2)
	{
		if(StringUtils.isBlank(str1)){
			str1 = "0";
		}
		
		if(StringUtils.isBlank(str2)){
			str2 = "0";
		}
		
		BigDecimal a = new BigDecimal(str1);
		BigDecimal b = new BigDecimal(str2);
		
		return String.valueOf(a.multiply(b));
	}
	
	//除
	public static String doubleDivide(String str1,String str2,int scale)
	{
		if(StringUtils.isBlank(str1)){
			str1 = "0";
		}
		
		if(StringUtils.isBlank(str2)){
			return "0";
		}
		
		BigDecimal a = new BigDecimal(str1);
		BigDecimal b = new BigDecimal(str2);
		if(b.compareTo(new BigDecimal(0)) == 0){
			return null;
		}
		return String.valueOf(a.divide(b,scale,BigDecimal.ROUND_HALF_UP));
	}
	
	public static String percent(String str1,String str2,int scale)
	{
		
		String str =  doubleDivide(str1,str2,scale);
		if(StringUtils.isBlank(str) || "0".equals(str)){
			return "";
		}
		if("1.00".equals(str)){
			return "100";
		}
		return (str.split("\\."))[1];
	}
	
	/**
	 * 获取编码后的message
	 * @param message
	 */
	@SuppressWarnings("deprecation")
	public static String getEncodeMessage(String str){
		
		return URLEncoder.encode(str);
	}
	
	/**
	 * 获取解码后的String
	 * @param message
	 * @return
	 */
	@SuppressWarnings("deprecation")
	public static String getDecodeMessage(String str){
		return URLDecoder.decode(str);
	}
	
	//获取UUID
	public static String getUUId()
	{
		String uuid = UUID.randomUUID().toString();
		return "O" + uuid.replaceAll("-", "");
	}
	
	//string转bigdecimal
	public static BigDecimal stringToBigDecimal(String str){
		return new BigDecimal(str);
	}
	

	
	public static String double2string(Double d) {
		java.text.NumberFormat nf = java.text.NumberFormat.getInstance();
		nf.setGroupingUsed(false);
		return nf.format(d);
	}
	
	/**获取流水号、受理号等信息
	 * A为申请流水号
	 * B为补证（补齐资料）流水号
	 * @param SerFlag参数标志位(S:   ;A:申请流水号   )等
	 * @nextVal 号码
	 * */
	public static String getSerializableNo(String serFlag, String number)
	{
		String date = DateUtils.getCurrentDate("yyyyMMdd");
		if(number.length() < 4)
		{
			int length = 4 - number.length();
			
			for(int i = 0; i < length; i++)
			{
				number = "0" + number;
			}
		}
		
		return serFlag + date + "-" + number;
	}

    /**
     * 字节转KB、MB
     * @param size 上传文件大小
     * @return
     */
    public static String getFileSize(Long size){
        BigDecimal big = new BigDecimal(size);
        //除以1024(因为1KB=1024B) 四舍五入
        BigDecimal rest = big.divide(new BigDecimal("1024"),2,BigDecimal.ROUND_HALF_UP);
        if(rest.compareTo(new BigDecimal("1024"))>0){
            rest = rest.divide(new BigDecimal("1024"),2,BigDecimal.ROUND_HALF_UP);
            return rest.toString()+"M";
        }
        return rest.toString()+"K";
    }

    /*
    * 随机生成四位数字验证码
    * */

	public static String getRound(){
		long round = Math.round(Math.random() * 9000 + 999);
		return String.valueOf(round);
	}

}
